
/**
* @ProjectName: ShopSytem
* @Title: AddOrder.java 
* @Package com.element5th.shop.servlet.good 
* @Description: 根据session中的id查询商品信息,并且传递给下订单页面
* @author 第五元素小组   曾慧
* @date 2012-10-26 16:21:38 
* @version V1.0   
*/

package com.element5th.shop.servlet.order;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.element5th.shop.comm.DaoFactory;
import com.element5th.shop.dto.BaseDto;
import com.element5th.shop.entity.CartList;
import com.element5th.shop.entity.ShopGood;
import com.element5th.shop.entity.User;

import java.io.IOException;
import java.util.ArrayList;

@WebServlet("/page/user/find_cartGoods")
public class FindGoodsOfCartToOrder extends HttpServlet{

	/**
	 * serialVersionUID
	 */
	
	private static final long serialVersionUID = 1L;
	

	/**
	 * 将session中购物车列表提出，查出相关商品信息,并且传到订单页面中去
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String message=null;
		
		//从session中取出dto，判断其是否为空，若为空则继续取session中的购物车对象
		HttpSession hs=request.getSession();
		BaseDto basedto=new BaseDto();
		basedto=(BaseDto) hs.getAttribute("CartList_list");
		
		//创建一个listdto，收集商品信息后，传给下一个页面
		ArrayList<BaseDto> basedto_list=new ArrayList<BaseDto>();
		
		//若basedto不为空，则取出对应的用户信息以及购物车信息
		if(basedto.getUser().getUserId()!=null){
			User user=basedto.getUser();
			
			
			//获得session中的购物车中的商品数量，如果数量为0，则说明该用户本次还没有往购物车中添加商品
			//则去查数据库中上一次的购物车商品数量，加入购物物车并显示
			
			//拿到session中的购物车商品列表
			java.util.List<CartList> cart_list=new ArrayList<CartList>();
			cart_list=user.getCartLists();
			//拿到商品列表的长度
			int goodsNunber=user.getCartLists().size();
			
			//如果购物车商品数量为0，则查询数据库取出上一次的购物车商品列表,遍历商品id,取出商品封装成dto
			if(goodsNunber==0){
				
				//先把用户封装成一个新的dto
				BaseDto baseDto=new BaseDto();
				ArrayList<BaseDto> baseDto_list=new ArrayList<BaseDto>();
				baseDto.setUser(user);
				//通过该dto查找购物车,返回值直接就是一个购物车的dtolist
				baseDto_list=(ArrayList<BaseDto>) DaoFactory.getGoodDao().getCartInfoByUserId(baseDto);
				
				//遍历该list，根据该list把商品信息和商品数量填充进去
				for(int i=0;i<baseDto_list.size();i++){
					//遍历购物车list，查找数据库中的商品信息,以及购物车中的商品数量，组建成一个新的dto
					BaseDto baseDto_temp=new BaseDto();
					ShopGood shopgood=new ShopGood();
					//通过购物车商品list拿到商品id，再去查询数据库，拿到商品对象
					CartList cartlist=new CartList();
					cartlist =baseDto_list.get(i).getCartList();
					int good_id=cartlist.getGoodId();
					//把good_id封装成一个dto，查询商品信息
					shopgood.setGoodId(good_id);
					baseDto_temp.setShopGood(shopgood);
					//根据用户id查询出商品信息并封装回传入的dto中
					baseDto_temp=DaoFactory.getGoodDao().getGoodInfo(baseDto_temp);
					//把购物车中查出来的商品数量也封装到dto中
					baseDto_temp.setCartList(cartlist);
					//把查出来的dto放回带list——dto中
					basedto_list.add(baseDto_temp);
				}	
				
			
			//如果购物车商品数量不为0，则说明已经查过数据库，并合并了上次的购物车商品，可直接查询商品信息
			}else{
				for(int i=0;i<goodsNunber;i++){
					//遍历购物车list，查找数据库中的商品信息,以及购物车中的商品数量，组建成一个新的dto
					BaseDto baseDto=new BaseDto();
					ShopGood shopgood=new ShopGood();
					//通过购物车商品list拿到商品id，再去查询数据库，拿到商品对象
					CartList cartlist=new CartList();
					cartlist =cart_list.get(i);
					int good_id=cartlist.getGoodId();
					//把good_id封装成一个dto，查询商品信息
					shopgood.setGoodId(good_id);
					baseDto.setShopGood(shopgood);
					//根据商品id查询商品信息，并封装回传入的dto中
					baseDto=DaoFactory.getGoodDao().getGoodInfo(baseDto);
					//把购物车中查出来的商品数量也封装到dto中
					baseDto.setCartList(cartlist);
					//把查出来的dto放回带list——dto中
					basedto_list.add(baseDto);
				}	
			}
			
				
		//若session为空，则直接从session中取出购物车对象
		}else{
		    ArrayList<CartList> cart_list=new ArrayList<CartList>();
		    cart_list=(ArrayList<CartList>) hs.getAttribute("CartList");
		    if(cart_list.size()==0){
		    	message="您的购物车里面没有任何商品，请先选购商品查看相关信息";
		    }else{
		    	for(int i=0;i<cart_list.size();i++){
		    		
		    		//遍历购物车list，查找数据库中的商品信息,以及购物车中的商品数量，组建成一个新的dto
					BaseDto baseDto=new BaseDto();
					ShopGood shopgood=new ShopGood();
					//通过购物车商品list拿到商品id，再去查询数据库，拿到商品对象
					CartList cartlist=new CartList();
					cartlist =cart_list.get(i);
					int good_id=cartlist.getGoodId();
					//把good_id封装成一个dto，查询商品信息
					shopgood.setGoodId(good_id);
					baseDto.setShopGood(shopgood);
					baseDto=DaoFactory.getGoodDao().getGoodInfo(baseDto);
					//把购物车中查出来的商品数量也封装到dto中
					baseDto.setCartList(cartlist);
					//把查出来的dto放回带list——dto中
					basedto_list.add(baseDto);
		    	
		    	}			
		    }
		}
		
		//把message和basedto_list传到下一个页面
		request.setAttribute("message", message);
		request.setAttribute("basedto_list", basedto_list);
		
		this.getServletContext().getRequestDispatcher("/page/user/CheckOrder.jsp").forward(request, response);
	}
	

}
